<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>抽象工厂</title>
</head>
<body>
<script src="../20180406/Interface.js"></script>
<script>
    var Bicycleshop=function(){};
    Bicycleshop.prototype={
        sellBicycle:function(model) {
            var bicycle=this.createBicycle(model);

            bicycle.assemble();
            bicycle.wash();

            return bicycle;
        },
        createBicycle:function(model){
            throw new Error('unsupported operation on an abstract class');
        }
    }

    var AcmeBicycleShop=function(){};
    extend(AcmeBicycleShop,BicycleShop);
    AcmeBicycleShop.prototype.createBicycle=function(){
        var bicycle;
        switch (model){
            case 'the speedster':
                bicycle=new AcmeSpeedster();
                break;
            case 'the lowster':
                bicycle=new AcmeLowster();
                break;
            case 'the comfort':
            default:
                bicycle=new AcmeComport();
        }
        Interface.ensureImplements(bicycle,Bicycle);
        return bicycle;
    }
    //在创建一个mazida的商店页和上面这种是一样的，
    //我认为的抽象工厂就是，我们把所有子类所具有的方法写在工厂中，但是创造商店要让人家自己去创建，
    //工厂只留给商店一个创建的接口，你可以在这个创建的商店去选择你要那种车，就相当于，
    //你不能直接去工厂买车，你去了，工厂会告诉你有哪几家店，比如acm，mazida，然后这些点里有各自品牌的舒适的
    //慢速的车，你可以去选择。

    //简单工厂呢。就相当于你现在有一个工厂，里面有很多类型的车，有一个创造的接口，然后你回西安去new
    //一个工厂，穿进去一个参数，他就直接在工厂给你new了，然后商店就只有一个，他给你提供洗车，修车等功能。
</script>
</body>
</html>